home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-1 / Inter.Net 55-1.iso / CBuilder / Setup / BCB / data.z / shellapi.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-02-09  |  25.7 KB  |  708 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Delphi Runtime Library                          }
  5. {       Windows 32bit API Interface Unit                }
  6. {                                                       }
  7. {       Copyright (c) 1992,98 Borland International     }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. unit ShellAPI;
  12.  
  13. {$WEAKPACKAGEUNIT}
  14.  
  15. interface
  16.  
  17. uses Windows;
  18.  
  19. (*$HPPEMIT '#include <shellapi.h>'*)
  20.  
  21.  
  22. type
  23.   {$EXTERNALSYM HDROP}
  24.   HDROP = Longint;
  25.   PPWideChar = ^PWideChar;
  26.  
  27. {$EXTERNALSYM DragQueryFileA}
  28. function DragQueryFileA(Drop: HDROP; FileIndex: UINT; FileName: PAnsiChar; cb: UINT): UINT; stdcall;
  29. {$EXTERNALSYM DragQueryFileW}
  30. function DragQueryFileW(Drop: HDROP; FileIndex: UINT; FileName: PWideChar; cb: UINT): UINT; stdcall;
  31. {$EXTERNALSYM DragQueryFile}
  32. function DragQueryFile(Drop: HDROP; FileIndex: UINT; FileName: PChar; cb: UINT): UINT; stdcall;
  33. {$EXTERNALSYM DragQueryPoint}
  34. function DragQueryPoint(Drop: HDROP; var Point: TPoint): BOOL; stdcall;
  35. {$EXTERNALSYM DragFinish}
  36. procedure DragFinish(Drop: HDROP); stdcall;
  37. {$EXTERNALSYM DragAcceptFiles}
  38. procedure DragAcceptFiles(Wnd: HWND; Accept: BOOL); stdcall;
  39. {$EXTERNALSYM ShellExecuteA}
  40. function ShellExecuteA(hWnd: HWND; Operation, FileName, Parameters,
  41.   Directory: PAnsiChar; ShowCmd: Integer): HINST; stdcall;
  42. {$EXTERNALSYM ShellExecuteW}
  43. function ShellExecuteW(hWnd: HWND; Operation, FileName, Parameters,
  44.   Directory: PWideChar; ShowCmd: Integer): HINST; stdcall;
  45. {$EXTERNALSYM ShellExecute}
  46. function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,
  47.   Directory: PChar; ShowCmd: Integer): HINST; stdcall;
  48. {$EXTERNALSYM FindExecutableA}
  49. function FindExecutableA(FileName, Directory: PAnsiChar; Result: PAnsiChar): HINST; stdcall;
  50. {$EXTERNALSYM FindExecutableW}
  51. function FindExecutableW(FileName, Directory: PWideChar; Result: PWideChar): HINST; stdcall;
  52. {$EXTERNALSYM FindExecutable}
  53. function FindExecutable(FileName, Directory: PChar; Result: PChar): HINST; stdcall;
  54. {$EXTERNALSYM CommandLineToArgvW}
  55. function CommandLineToArgvW(lpCmdLine: LPCWSTR; var pNumArgs: Integer): PPWideChar; stdcall;
  56. {$EXTERNALSYM ShellAboutA}
  57. function ShellAboutA(Wnd: HWND; szApp, szOtherStuff: PAnsiChar; Icon: HICON): Integer; stdcall;
  58. {$EXTERNALSYM ShellAboutW}
  59. function ShellAboutW(Wnd: HWND; szApp, szOtherStuff: PWideChar; Icon: HICON): Integer; stdcall;
  60. {$EXTERNALSYM ShellAbout}
  61. function ShellAbout(Wnd: HWND; szApp, szOtherStuff: PChar; Icon: HICON): Integer; stdcall;
  62. {$EXTERNALSYM DuplicateIcon}
  63. function DuplicateIcon(hInst: HINST; Icon: HICON): HICON; stdcall;
  64. {$EXTERNALSYM ExtractAssociatedIconA}
  65. function ExtractAssociatedIconA(hInst: HINST; lpIconPath: PAnsiChar;
  66.   var lpiIcon: Word): HICON; stdcall;
  67. {$EXTERNALSYM ExtractAssociatedIconW}
  68. function ExtractAssociatedIconW(hInst: HINST; lpIconPath: PWideChar;
  69.   var lpiIcon: Word): HICON; stdcall;
  70. {$EXTERNALSYM ExtractAssociatedIcon}
  71. function ExtractAssociatedIcon(hInst: HINST; lpIconPath: PChar;
  72.   var lpiIcon: Word): HICON; stdcall;
  73. {$EXTERNALSYM ExtractIconA}
  74. function ExtractIconA(hInst: HINST; lpszExeFileName: PAnsiChar;
  75.   nIconIndex: UINT): HICON; stdcall;
  76. {$EXTERNALSYM ExtractIconW}
  77. function ExtractIconW(hInst: HINST; lpszExeFileName: PWideChar;
  78.   nIconIndex: UINT): HICON; stdcall;
  79. {$EXTERNALSYM ExtractIcon}
  80. function ExtractIcon(hInst: HINST; lpszExeFileName: PChar;
  81.   nIconIndex: UINT): HICON; stdcall;
  82.  
  83. type
  84.   PDragInfoA = ^TDragInfoA;
  85.   PDragInfoW = ^TDragInfoW;
  86.   PDragInfo = PDragInfoA;
  87.   TDragInfoA = record
  88.     uSize: UINT;                 { init with SizeOf(DRAGINFO) }
  89.     pt: TPoint;
  90.     fNC: BOOL;
  91.     lpFileList: PAnsiChar;
  92.     grfKeyState: DWORD;
  93.   end;
  94.   TDragInfoW = record
  95.     uSize: UINT;                 { init with SizeOf(DRAGINFO) }
  96.     pt: TPoint;
  97.     fNC: BOOL;
  98.     lpFileList: PWideChar;
  99.     grfKeyState: DWORD;
  100.   end;
  101.   TDragInfo = TDragInfoA;
  102.  
  103. const
  104. { AppBar stuff }
  105.  
  106.   {$EXTERNALSYM ABM_NEW}
  107.   ABM_NEW           = $00000000;
  108.   {$EXTERNALSYM ABM_REMOVE}
  109.   ABM_REMOVE        = $00000001;
  110.   {$EXTERNALSYM ABM_QUERYPOS}
  111.   ABM_QUERYPOS      = $00000002;
  112.   {$EXTERNALSYM ABM_SETPOS}
  113.   ABM_SETPOS        = $00000003;
  114.   {$EXTERNALSYM ABM_GETSTATE}
  115.   ABM_GETSTATE      = $00000004;
  116.   {$EXTERNALSYM ABM_GETTASKBARPOS}
  117.   ABM_GETTASKBARPOS = $00000005;
  118.   {$EXTERNALSYM ABM_ACTIVATE}
  119.   ABM_ACTIVATE      = $00000006;  { lParam = True/False means activate/deactivate }
  120.   {$EXTERNALSYM ABM_GETAUTOHIDEBAR}
  121.   ABM_GETAUTOHIDEBAR = $00000007;
  122.   {$EXTERNALSYM ABM_SETAUTOHIDEBAR}
  123.   ABM_SETAUTOHIDEBAR = $00000008;  { this can fail at any time.  MUST check the result
  124.                                      lParam = TRUE/FALSE  Set/Unset
  125.                                      uEdge = what edge }
  126.   {$EXTERNALSYM ABM_WINDOWPOSCHANGED}
  127.   ABM_WINDOWPOSCHANGED = $0000009;
  128.  
  129. { these are put in the wparam of callback messages }
  130.  
  131.   {$EXTERNALSYM ABN_STATECHANGE}
  132.   ABN_STATECHANGE    = $0000000;
  133.   {$EXTERNALSYM ABN_POSCHANGED}
  134.   ABN_POSCHANGED     = $0000001;
  135.   {$EXTERNALSYM ABN_FULLSCREENAPP}
  136.   ABN_FULLSCREENAPP  = $0000002;
  137.   {$EXTERNALSYM ABN_WINDOWARRANGE}
  138.   ABN_WINDOWARRANGE  = $0000003; { lParam = True means hide }
  139.  
  140. { flags for get state }
  141.  
  142.   {$EXTERNALSYM ABS_AUTOHIDE}
  143.   ABS_AUTOHIDE    = $0000001;
  144.   {$EXTERNALSYM ABS_ALWAYSONTOP}
  145.   ABS_ALWAYSONTOP = $0000002;
  146.  
  147.   {$EXTERNALSYM ABE_LEFT}
  148.   ABE_LEFT        = 0;
  149.   {$EXTERNALSYM ABE_TOP}
  150.   ABE_TOP         = 1;
  151.   {$EXTERNALSYM ABE_RIGHT}
  152.   ABE_RIGHT       = 2;
  153.   {$EXTERNALSYM ABE_BOTTOM}
  154.   ABE_BOTTOM      = 3;
  155.  
  156. type
  157.   PAppBarData = ^TAppBarData;
  158.   {$EXTERNALSYM _AppBarData}
  159.   _AppBarData = record
  160.     cbSize: DWORD;
  161.     hWnd: HWND;
  162.     uCallbackMessage: UINT;
  163.     uEdge: UINT;
  164.     rc: TRect;
  165.     lParam: LPARAM; { message specific }
  166.   end;
  167.   TAppBarData = _AppBarData;
  168.   {$EXTERNALSYM APPBARDATA}
  169.   APPBARDATA = _AppBarData;
  170.  
  171. {$EXTERNALSYM SHAppBarMessage}
  172. function SHAppBarMessage(dwMessage: DWORD; var pData: TAppBarData): UINT; stdcall;
  173.  
  174.  
  175. {$EXTERNALSYM DoEnvironmentSubstA}
  176. function DoEnvironmentSubstA(szString: PAnsiChar; cbString: UINT): DWORD; stdcall;
  177. {$EXTERNALSYM DoEnvironmentSubstW}
  178. function DoEnvironmentSubstW(szString: PWideChar; cbString: UINT): DWORD; stdcall;
  179. {$EXTERNALSYM DoEnvironmentSubst}
  180. function DoEnvironmentSubst(szString: PChar; cbString: UINT): DWORD; stdcall;
  181. {$EXTERNALSYM ExtractIconExA}
  182. function ExtractIconExA(lpszFile: PAnsiChar; nIconIndex: Integer;
  183.   var phiconLarge, phiconSmall: HICON; nIcons: UINT): UINT; stdcall;
  184. {$EXTERNALSYM ExtractIconExW}
  185. function ExtractIconExW(lpszFile: PWideChar; nIconIndex: Integer;
  186.   var phiconLarge, phiconSmall: HICON; nIcons: UINT): UINT; stdcall;
  187. {$EXTERNALSYM ExtractIconEx}
  188. function ExtractIconEx(lpszFile: PChar; nIconIndex: Integer;
  189.   var phiconLarge, phiconSmall: HICON; nIcons: UINT): UINT; stdcall;
  190.  
  191.  
  192. { Shell File Operations }
  193.  
  194. const
  195.   {$EXTERNALSYM FO_MOVE}
  196.   FO_MOVE           = $0001;
  197.   {$EXTERNALSYM FO_COPY}
  198.   FO_COPY           = $0002;
  199.   {$EXTERNALSYM FO_DELETE}
  200.   FO_DELETE         = $0003;
  201.   {$EXTERNALSYM FO_RENAME}
  202.   FO_RENAME         = $0004;
  203.  
  204.   {$EXTERNALSYM FOF_MULTIDESTFILES}
  205.   FOF_MULTIDESTFILES         = $0001;
  206.   {$EXTERNALSYM FOF_CONFIRMMOUSE}
  207.   FOF_CONFIRMMOUSE           = $0002;
  208.   {$EXTERNALSYM FOF_SILENT}
  209.   FOF_SILENT                 = $0004;  { don't create progress/report }
  210.   {$EXTERNALSYM FOF_RENAMEONCOLLISION}
  211.   FOF_RENAMEONCOLLISION      = $0008;
  212.   {$EXTERNALSYM FOF_NOCONFIRMATION}
  213.   FOF_NOCONFIRMATION         = $0010;  { Don't prompt the user. }
  214.   {$EXTERNALSYM FOF_WANTMAPPINGHANDLE}
  215.   FOF_WANTMAPPINGHANDLE      = $0020;  { Fill in SHFILEOPSTRUCT.hNameMappings
  216.                                          Must be freed using SHFreeNameMappings }
  217.   {$EXTERNALSYM FOF_ALLOWUNDO}
  218.   FOF_ALLOWUNDO              = $0040;
  219.   {$EXTERNALSYM FOF_FILESONLY}
  220.   FOF_FILESONLY              = $0080;  { on *.*, do only files }
  221.   {$EXTERNALSYM FOF_SIMPLEPROGRESS}
  222.   FOF_SIMPLEPROGRESS         = $0100;  { means don't show names of files }
  223.   {$EXTERNALSYM FOF_NOCONFIRMMKDIR}
  224.   FOF_NOCONFIRMMKDIR         = $0200;  { don't confirm making any needed dirs }
  225.   {$EXTERNALSYM FOF_NOERRORUI}
  226.   FOF_NOERRORUI              = $0400;  { don't put up error UI }
  227.  
  228. type
  229.   {$EXTERNALSYM FILEOP_FLAGS}
  230.   FILEOP_FLAGS = Word;
  231.  
  232. const
  233.   {$EXTERNALSYM PO_DELETE}
  234.   PO_DELETE       = $0013;  { printer is being deleted }
  235.   {$EXTERNALSYM PO_RENAME}
  236.   PO_RENAME       = $0014;  { printer is being renamed }
  237.   {$EXTERNALSYM PO_PORTCHANGE}
  238.   PO_PORTCHANGE   = $0020;  { port this printer connected to is being changed
  239.                               if this id is set, the strings received by
  240.                               the copyhook are a doubly-null terminated
  241.                               list of strings.  The first is the printer
  242.                               name and the second is the printer port. }
  243.   {$EXTERNALSYM PO_REN_PORT}
  244.   PO_REN_PORT     = $0034;  { PO_RENAME and PO_PORTCHANGE at same time. }
  245.  
  246. { no POF_ flags currently defined }
  247.  
  248. type
  249.   {$EXTERNALSYM PRINTEROP_FLAGS}
  250.   PRINTEROP_FLAGS = Word;
  251.  
  252. { implicit parameters are:
  253.       if pFrom or pTo are unqualified names the current directories are
  254.       taken from the global current drive/directory settings managed
  255.       by Get/SetCurrentDrive/Directory
  256.  
  257.       the global confirmation settings }
  258.  
  259.   PSHFileOpStructA = ^TSHFileOpStructA;
  260.   PSHFileOpStructW = ^TSHFileOpStructW;
  261.   PSHFileOpStruct = PSHFileOpStructA;
  262.   {$EXTERNALSYM _SHFILEOPSTRUCTA}
  263.   _SHFILEOPSTRUCTA = packed record
  264.     Wnd: HWND;
  265.     wFunc: UINT;
  266.     pFrom: PAnsiChar;
  267.     pTo: PAnsiChar;
  268.     fFlags: FILEOP_FLAGS;
  269.     fAnyOperationsAborted: BOOL;
  270.     hNameMappings: Pointer;
  271.     lpszProgressTitle: PAnsiChar; { only used if FOF_SIMPLEPROGRESS }
  272.   end;
  273.   {$EXTERNALSYM _SHFILEOPSTRUCTW}
  274.   _SHFILEOPSTRUCTW = packed record
  275.     Wnd: HWND;
  276.     wFunc: UINT;
  277.     pFrom: PWideChar;
  278.     pTo: PWideChar;
  279.     fFlags: FILEOP_FLAGS;
  280.     fAnyOperationsAborted: BOOL;
  281.     hNameMappings: Pointer;
  282.     lpszProgressTitle: PWideChar; { only used if FOF_SIMPLEPROGRESS }
  283.   end;
  284.   {$EXTERNALSYM _SHFILEOPSTRUCT}
  285.   _SHFILEOPSTRUCT = _SHFILEOPSTRUCTA;
  286.   TSHFileOpStructA = _SHFILEOPSTRUCTA;
  287.   TSHFileOpStructW = _SHFILEOPSTRUCTW;
  288.   TSHFileOpStruct = TSHFileOpStructA;
  289.   {$EXTERNALSYM SHFILEOPSTRUCTA}
  290.   SHFILEOPSTRUCTA = _SHFILEOPSTRUCTA;
  291.   {$EXTERNALSYM SHFILEOPSTRUCTW}
  292.   SHFILEOPSTRUCTW = _SHFILEOPSTRUCTW;
  293.   {$EXTERNALSYM SHFILEOPSTRUCT}
  294.   SHFILEOPSTRUCT = SHFILEOPSTRUCTA;
  295.  
  296. {$EXTERNALSYM SHFileOperationA}
  297. function SHFileOperationA(const lpFileOp: TSHFileOpStructA): Integer; stdcall;
  298. {$EXTERNALSYM SHFileOperationW}
  299. function SHFileOperationW(const lpFileOp: TSHFileOpStructW): Integer; stdcall;
  300. {$EXTERNALSYM SHFileOperation}
  301. function SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; stdcall;
  302. {$EXTERNALSYM SHFreeNameMappings}
  303. procedure SHFreeNameMappings(hNameMappings: THandle); stdcall;
  304.  
  305. type
  306.   PSHNameMappingA = ^TSHNameMappingA;
  307.   PSHNameMappingW = ^TSHNameMappingW;
  308.   PSHNameMapping = PSHNameMappingA;
  309.   {$EXTERNALSYM _SHNAMEMAPPINGA}
  310.   _SHNAMEMAPPINGA = record
  311.     pszOldPath: PAnsiChar;
  312.     pszNewPath: PAnsiChar;
  313.     cchOldPath: Integer;
  314.     cchNewPath: Integer;
  315.   end;
  316.   {$EXTERNALSYM _SHNAMEMAPPINGW}
  317.   _SHNAMEMAPPINGW = record
  318.     pszOldPath: PWideChar;
  319.     pszNewPath: PWideChar;
  320.     cchOldPath: Integer;
  321.     cchNewPath: Integer;
  322.   end;
  323.   {$EXTERNALSYM _SHNAMEMAPPING}
  324.   _SHNAMEMAPPING = _SHNAMEMAPPINGA;
  325.   TSHNameMappingA = _SHNAMEMAPPINGA;
  326.   TSHNameMappingW = _SHNAMEMAPPINGW;
  327.   TSHNameMapping = TSHNameMappingA;
  328.   {$EXTERNALSYM SHNAMEMAPPINGA}
  329.   SHNAMEMAPPINGA = _SHNAMEMAPPINGA;
  330.   {$EXTERNALSYM SHNAMEMAPPINGW}
  331.   SHNAMEMAPPINGW = _SHNAMEMAPPINGW;
  332.   {$EXTERNALSYM SHNAMEMAPPING}
  333.   SHNAMEMAPPING = SHNAMEMAPPINGA;
  334.  
  335.  
  336. { ShellExecute() and ShellExecuteEx() error codes }
  337. const
  338. { regular WinExec() codes }
  339.   {$EXTERNALSYM SE_ERR_FNF}
  340.   SE_ERR_FNF              = 2;       { file not found }
  341.   {$EXTERNALSYM SE_ERR_PNF}
  342.   SE_ERR_PNF              = 3;       { path not found }
  343.   {$EXTERNALSYM SE_ERR_ACCESSDENIED}
  344.   SE_ERR_ACCESSDENIED     = 5;       { access denied }
  345.   {$EXTERNALSYM SE_ERR_OOM}
  346.   SE_ERR_OOM              = 8;       { out of memory }
  347.   {$EXTERNALSYM SE_ERR_DLLNOTFOUND}
  348.   SE_ERR_DLLNOTFOUND      = 32;
  349.  
  350. { error values for ShellExecute() beyond the regular WinExec() codes }
  351.   {$EXTERNALSYM SE_ERR_SHARE}
  352.   SE_ERR_SHARE                    = 26;
  353.   {$EXTERNALSYM SE_ERR_ASSOCINCOMPLETE}
  354.   SE_ERR_ASSOCINCOMPLETE          = 27;
  355.   {$EXTERNALSYM SE_ERR_DDETIMEOUT}
  356.   SE_ERR_DDETIMEOUT               = 28;
  357.   {$EXTERNALSYM SE_ERR_DDEFAIL}
  358.   SE_ERR_DDEFAIL                  = 29;
  359.   {$EXTERNALSYM SE_ERR_DDEBUSY}
  360.   SE_ERR_DDEBUSY                  = 30;
  361.   {$EXTERNALSYM SE_ERR_NOASSOC}
  362.   SE_ERR_NOASSOC                  = 31;
  363.  
  364. { Note CLASSKEY overrides CLASSNAME }
  365.   {$EXTERNALSYM SEE_MASK_CLASSNAME}
  366.   SEE_MASK_CLASSNAME      = $00000001;
  367.   {$EXTERNALSYM SEE_MASK_CLASSKEY}
  368.   SEE_MASK_CLASSKEY       = $00000003;
  369. { Note INVOKEIDLIST overrides IDLIST }
  370.   {$EXTERNALSYM SEE_MASK_IDLIST}
  371.   SEE_MASK_IDLIST         = $00000004;
  372.   {$EXTERNALSYM SEE_MASK_INVOKEIDLIST}
  373.   SEE_MASK_INVOKEIDLIST   = $0000000c;
  374.   {$EXTERNALSYM SEE_MASK_ICON}
  375.   SEE_MASK_ICON           = $00000010;
  376.   {$EXTERNALSYM SEE_MASK_HOTKEY}
  377.   SEE_MASK_HOTKEY         = $00000020;
  378.   {$EXTERNALSYM SEE_MASK_NOCLOSEPROCESS}
  379.   SEE_MASK_NOCLOSEPROCESS = $00000040;
  380.   {$EXTERNALSYM SEE_MASK_CONNECTNETDRV}
  381.   SEE_MASK_CONNECTNETDRV  = $00000080;
  382.   {$EXTERNALSYM SEE_MASK_FLAG_DDEWAIT}
  383.   SEE_MASK_FLAG_DDEWAIT   = $00000100;
  384.   {$EXTERNALSYM SEE_MASK_DOENVSUBST}
  385.   SEE_MASK_DOENVSUBST     = $00000200;
  386.   {$EXTERNALSYM SEE_MASK_FLAG_NO_UI}
  387.   SEE_MASK_FLAG_NO_UI     = $00000400;
  388.   {$EXTERNALSYM SEE_MASK_UNICODE}
  389.   SEE_MASK_UNICODE        = $00010000; // !!! changed from previous SDK (was $00004000)
  390.   {$EXTERNALSYM SEE_MASK_NO_CONSOLE}
  391.   SEE_MASK_NO_CONSOLE     = $00008000;
  392.   {$EXTERNALSYM SEE_MASK_ASYNCOK}
  393.   SEE_MASK_ASYNCOK        = $00100000;
  394.  
  395. type
  396.   PShellExecuteInfoA = ^TShellExecuteInfoA;
  397.   PShellExecuteInfoW = ^TShellExecuteInfoW;
  398.   PShellExecuteInfo = PShellExecuteInfoA;
  399.   {$EXTERNALSYM _SHELLEXECUTEINFOA}
  400.   _SHELLEXECUTEINFOA = record
  401.     cbSize: DWORD;
  402.     fMask: ULONG;
  403.     Wnd: HWND;
  404.     lpVerb: PAnsiChar;
  405.     lpFile: PAnsiChar;
  406.     lpParameters: PAnsiChar;
  407.     lpDirectory: PAnsiChar;
  408.     nShow: Integer;
  409.     hInstApp: HINST;
  410.     { Optional fields }
  411.     lpIDList: Pointer;
  412.     lpClass: PAnsiChar;
  413.     hkeyClass: HKEY;
  414.     dwHotKey: DWORD;
  415.     hIcon: THandle;
  416.     hProcess: THandle;
  417.   end;
  418.   {$EXTERNALSYM _SHELLEXECUTEINFOW}
  419.   _SHELLEXECUTEINFOW = record
  420.     cbSize: DWORD;
  421.     fMask: ULONG;
  422.     Wnd: HWND;
  423.     lpVerb: PWideChar;
  424.     lpFile: PWideChar;
  425.     lpParameters: PWideChar;
  426.     lpDirectory: PWideChar;
  427.     nShow: Integer;
  428.     hInstApp: HINST;
  429.     { Optional fields }
  430.     lpIDList: Pointer;
  431.     lpClass: PWideChar;
  432.     hkeyClass: HKEY;
  433.     dwHotKey: DWORD;
  434.     hIcon: THandle;
  435.     hProcess: THandle;
  436.   end;
  437.   {$EXTERNALSYM _SHELLEXECUTEINFO}
  438.   _SHELLEXECUTEINFO = _SHELLEXECUTEINFOA;
  439.   TShellExecuteInfoA = _SHELLEXECUTEINFOA;
  440.   TShellExecuteInfoW = _SHELLEXECUTEINFOW;
  441.   TShellExecuteInfo = TShellExecuteInfoA;
  442.   {$EXTERNALSYM SHELLEXECUTEINFOA}
  443.   SHELLEXECUTEINFOA = _SHELLEXECUTEINFOA;
  444.   {$EXTERNALSYM SHELLEXECUTEINFOW}
  445.   SHELLEXECUTEINFOW = _SHELLEXECUTEINFOW;
  446.   {$EXTERNALSYM SHELLEXECUTEINFO}
  447.   SHELLEXECUTEINFO = SHELLEXECUTEINFOA;
  448.  
  449. {$EXTERNALSYM ShellExecuteExA}
  450. function ShellExecuteExA(lpExecInfo: PShellExecuteInfoA):BOOL; stdcall;
  451. {$EXTERNALSYM ShellExecuteExW}
  452. function ShellExecuteExW(lpExecInfo: PShellExecuteInfoW):BOOL; stdcall;
  453. {$EXTERNALSYM ShellExecuteEx}
  454. function ShellExecuteEx(lpExecInfo: PShellExecuteInfo):BOOL; stdcall;
  455.  
  456. { Tray notification definitions }
  457.  
  458. type
  459.   PNotifyIconDataA = ^TNotifyIconDataA;
  460.   PNotifyIconDataW = ^TNotifyIconDataW;
  461.   PNotifyIconData = PNotifyIconDataA;
  462.   {$EXTERNALSYM _NOTIFYICONDATAA}
  463.   _NOTIFYICONDATAA = record
  464.     cbSize: DWORD;
  465.     Wnd: HWND;
  466.     uID: UINT;
  467.     uFlags: UINT;
  468.     uCallbackMessage: UINT;
  469.     hIcon: HICON;
  470.     szTip: array [0..63] of AnsiChar;
  471.   end;
  472.   {$EXTERNALSYM _NOTIFYICONDATAW}
  473.   _NOTIFYICONDATAW = record
  474.     cbSize: DWORD;
  475.     Wnd: HWND;
  476.     uID: UINT;
  477.     uFlags: UINT;
  478.     uCallbackMessage: UINT;
  479.     hIcon: HICON;
  480.     szTip: array [0..63] of WideChar;
  481.   end;
  482.   {$EXTERNALSYM _NOTIFYICONDATA}
  483.   _NOTIFYICONDATA = _NOTIFYICONDATAA;
  484.   TNotifyIconDataA = _NOTIFYICONDATAA;
  485.   TNotifyIconDataW = _NOTIFYICONDATAW;
  486.   TNotifyIconData = TNotifyIconDataA;
  487.   {$EXTERNALSYM NOTIFYICONDATAA}
  488.   NOTIFYICONDATAA = _NOTIFYICONDATAA;
  489.   {$EXTERNALSYM NOTIFYICONDATAW}
  490.   NOTIFYICONDATAW = _NOTIFYICONDATAW;
  491.   {$EXTERNALSYM NOTIFYICONDATA}
  492.   NOTIFYICONDATA = NOTIFYICONDATAA;
  493.  
  494. const
  495.   {$EXTERNALSYM NIM_ADD}
  496.   NIM_ADD         = $00000000;
  497.   {$EXTERNALSYM NIM_MODIFY}
  498.   NIM_MODIFY      = $00000001;
  499.   {$EXTERNALSYM NIM_DELETE}
  500.   NIM_DELETE      = $00000002;
  501.  
  502.   {$EXTERNALSYM NIF_MESSAGE}
  503.   NIF_MESSAGE     = $00000001;
  504.   {$EXTERNALSYM NIF_ICON}
  505.   NIF_ICON        = $00000002;
  506.   {$EXTERNALSYM NIF_TIP}
  507.   NIF_TIP         = $00000004;
  508.  
  509. {$EXTERNALSYM Shell_NotifyIconA}
  510. function Shell_NotifyIconA(dwMessage: DWORD; lpData: PNotifyIconDataA): BOOL; stdcall;
  511. {$EXTERNALSYM Shell_NotifyIconW}
  512. function Shell_NotifyIconW(dwMessage: DWORD; lpData: PNotifyIconDataW): BOOL; stdcall;
  513. {$EXTERNALSYM Shell_NotifyIcon}
  514. function Shell_NotifyIcon(dwMessage: DWORD; lpData: PNotifyIconData): BOOL; stdcall;
  515.  
  516. { Begin SHGetFileInfo }
  517.  
  518. (*
  519.  * The SHGetFileInfo API provides an easy way to get attributes
  520.  * for a file given a pathname.
  521.  *
  522.  *   PARAMETERS
  523.  *
  524.  *     pszPath              file name to get info about
  525.  *     dwFileAttributes     file attribs, only used with SHGFI_USEFILEATTRIBUTES
  526.  *     psfi                 place to return file info
  527.  *     cbFileInfo           size of structure
  528.  *     uFlags               flags
  529.  *
  530.  *   RETURN
  531.  *     TRUE if things worked
  532.  *)
  533.  
  534. type
  535.   PSHFileInfoA = ^TSHFileInfoA;
  536.   PSHFileInfoW = ^TSHFileInfoW;
  537.   PSHFileInfo = PSHFileInfoA;
  538.   {$EXTERNALSYM _SHFILEINFOA}
  539.   _SHFILEINFOA = record
  540.     hIcon: HICON;                      { out: icon }
  541.     iIcon: Integer;                    { out: icon index }
  542.     dwAttributes: DWORD;               { out: SFGAO_ flags }
  543.     szDisplayName: array [0..MAX_PATH-1] of  AnsiChar; { out: display name (or path) }
  544.     szTypeName: array [0..79] of AnsiChar;             { out: type name }
  545.   end;
  546.   {$EXTERNALSYM _SHFILEINFOW}
  547.   _SHFILEINFOW = record
  548.     hIcon: HICON;                      { out: icon }
  549.     iIcon: Integer;                    { out: icon index }
  550.     dwAttributes: DWORD;               { out: SFGAO_ flags }
  551.     szDisplayName: array [0..MAX_PATH-1] of  WideChar; { out: display name (or path) }
  552.     szTypeName: array [0..79] of WideChar;             { out: type name }
  553.   end;
  554.   {$EXTERNALSYM _SHFILEINFO}
  555.   _SHFILEINFO = _SHFILEINFOA;
  556.   TSHFileInfoA = _SHFILEINFOA;
  557.   TSHFileInfoW = _SHFILEINFOW;
  558.   TSHFileInfo = TSHFileInfoA;
  559.   {$EXTERNALSYM SHFILEINFOA}
  560.   SHFILEINFOA = _SHFILEINFOA;
  561.   {$EXTERNALSYM SHFILEINFOW}
  562.   SHFILEINFOW = _SHFILEINFOW;
  563.   {$EXTERNALSYM SHFILEINFO}
  564.   SHFILEINFO = SHFILEINFOA;
  565.  
  566. const
  567.   {$EXTERNALSYM SHGFI_ICON}
  568.   SHGFI_ICON              = $000000100;     { get icon }
  569.   {$EXTERNALSYM SHGFI_DISPLAYNAME}
  570.   SHGFI_DISPLAYNAME       = $000000200;     { get display name }
  571.   {$EXTERNALSYM SHGFI_TYPENAME}
  572.   SHGFI_TYPENAME          = $000000400;     { get type name }
  573.   {$EXTERNALSYM SHGFI_ATTRIBUTES}
  574.   SHGFI_ATTRIBUTES        = $000000800;     { get attributes }
  575.   {$EXTERNALSYM SHGFI_ICONLOCATION}
  576.   SHGFI_ICONLOCATION      = $000001000;     { get icon location }
  577.   {$EXTERNALSYM SHGFI_EXETYPE}
  578.   SHGFI_EXETYPE           = $000002000;     { return exe type }
  579.   {$EXTERNALSYM SHGFI_SYSICONINDEX}
  580.   SHGFI_SYSICONINDEX      = $000004000;     { get system icon index }
  581.   {$EXTERNALSYM SHGFI_LINKOVERLAY}
  582.   SHGFI_LINKOVERLAY       = $000008000;     { put a link overlay on icon }
  583.   {$EXTERNALSYM SHGFI_SELECTED}
  584.   SHGFI_SELECTED          = $000010000;     { show icon in selected state }
  585.   {$EXTERNALSYM SHGFI_LARGEICON}
  586.   SHGFI_LARGEICON         = $000000000;     { get large icon }
  587.   {$EXTERNALSYM SHGFI_SMALLICON}
  588.   SHGFI_SMALLICON         = $000000001;     { get small icon }
  589.   {$EXTERNALSYM SHGFI_OPENICON}
  590.   SHGFI_OPENICON          = $000000002;     { get open icon }
  591.   {$EXTERNALSYM SHGFI_SHELLICONSIZE}
  592.   SHGFI_SHELLICONSIZE     = $000000004;     { get shell size icon }
  593.   {$EXTERNALSYM SHGFI_PIDL}
  594.   SHGFI_PIDL              = $000000008;     { pszPath is a pidl }
  595.   {$EXTERNALSYM SHGFI_USEFILEATTRIBUTES}
  596.   SHGFI_USEFILEATTRIBUTES = $000000010;     { use passed dwFileAttribute }
  597.  
  598. {$EXTERNALSYM SHGetFileInfoA}
  599. function SHGetFileInfoA(pszPath: PAnsiChar; dwFileAttributes: DWORD;
  600.   var psfi: TSHFileInfoA; cbFileInfo, uFlags: UINT): DWORD; stdcall;
  601. {$EXTERNALSYM SHGetFileInfoW}
  602. function SHGetFileInfoW(pszPath: PAnsiChar; dwFileAttributes: DWORD;
  603.   var psfi: TSHFileInfoW; cbFileInfo, uFlags: UINT): DWORD; stdcall;
  604. {$EXTERNALSYM SHGetFileInfo}
  605. function SHGetFileInfo(pszPath: PAnsiChar; dwFileAttributes: DWORD;
  606.   var psfi: TSHFileInfo; cbFileInfo, uFlags: UINT): DWORD; stdcall;
  607.  
  608. const
  609.   {$EXTERNALSYM SHGNLI_PIDL}
  610.   SHGNLI_PIDL             = $000000001;     { pszLinkTo is a pidl }
  611.   {$EXTERNALSYM SHGNLI_PREFIXNAME}
  612.   SHGNLI_PREFIXNAME       = $000000002;     { Make name "Shortcut to xxx" }
  613.   {$EXTERNALSYM SHGNLI_NOUNIQUE}
  614.   SHGNLI_NOUNIQUE         = $000000004;     { don't do the unique name generation }
  615.  
  616.   shell32 = 'shell32.dll';
  617.  
  618. implementation
  619.  
  620. {$EXTERNALSYM CommandLineToArgvW}
  621. function CommandLineToArgvW; external shell32 name 'CommandLineToArgvW';
  622. {$EXTERNALSYM DoEnvironmentSubstA}
  623. function DoEnvironmentSubstA; external shell32 name 'DoEnvironmentSubstA';
  624. {$EXTERNALSYM DoEnvironmentSubstW}
  625. function DoEnvironmentSubstW; external shell32 name 'DoEnvironmentSubstW';
  626. {$EXTERNALSYM DoEnvironmentSubst}
  627. function DoEnvironmentSubst; external shell32 name 'DoEnvironmentSubstA';
  628. {$EXTERNALSYM DragAcceptFiles}
  629. procedure DragAcceptFiles; external shell32 name 'DragAcceptFiles';
  630. {$EXTERNALSYM DragFinish}
  631. procedure DragFinish; external shell32 name 'DragFinish';
  632. {$EXTERNALSYM DragQueryFileA}
  633. function DragQueryFileA; external shell32 name 'DragQueryFileA';
  634. {$EXTERNALSYM DragQueryFileW}
  635. function DragQueryFileW; external shell32 name 'DragQueryFileW';
  636. {$EXTERNALSYM DragQueryFile}
  637. function DragQueryFile; external shell32 name 'DragQueryFileA';
  638. {$EXTERNALSYM DragQueryPoint}
  639. function DragQueryPoint; external shell32 name 'DragQueryPoint';
  640. {$EXTERNALSYM DuplicateIcon}
  641. function DuplicateIcon; external shell32 name 'DuplicateIcon';
  642. {$EXTERNALSYM ExtractAssociatedIconA}
  643. function ExtractAssociatedIconA; external shell32 name 'ExtractAssociatedIconA';
  644. {$EXTERNALSYM ExtractAssociatedIconW}
  645. function ExtractAssociatedIconW; external shell32 name 'ExtractAssociatedIconW';
  646. {$EXTERNALSYM ExtractAssociatedIcon}
  647. function ExtractAssociatedIcon; external shell32 name 'ExtractAssociatedIconA';
  648. {$EXTERNALSYM ExtractIconA}
  649. function ExtractIconA; external shell32 name 'ExtractIconA';
  650. {$EXTERNALSYM ExtractIconW}
  651. function ExtractIconW; external shell32 name 'ExtractIconW';
  652. {$EXTERNALSYM ExtractIcon}
  653. function ExtractIcon; external shell32 name 'ExtractIconA';
  654. {$EXTERNALSYM ExtractIconExA}
  655. function ExtractIconExA; external shell32 name 'ExtractIconExA';
  656. {$EXTERNALSYM ExtractIconExW}
  657. function ExtractIconExW; external shell32 name 'ExtractIconExW';
  658. {$EXTERNALSYM ExtractIconEx}
  659. function ExtractIconEx; external shell32 name 'ExtractIconExA';
  660. {$EXTERNALSYM FindExecutableA}
  661. function FindExecutableA; external shell32 name 'FindExecutableA';
  662. {$EXTERNALSYM FindExecutableW}
  663. function FindExecutableW; external shell32 name 'FindExecutableW';
  664. {$EXTERNALSYM FindExecutable}
  665. function FindExecutable; external shell32 name 'FindExecutableA';
  666. {$EXTERNALSYM SHAppBarMessage}
  667. function SHAppBarMessage; external shell32 name 'SHAppBarMessage';
  668. {$EXTERNALSYM SHFileOperationA}
  669. function SHFileOperationA; external shell32 name 'SHFileOperationA';
  670. {$EXTERNALSYM SHFileOperationW}
  671. function SHFileOperationW; external shell32 name 'SHFileOperationW';
  672. {$EXTERNALSYM SHFileOperation}
  673. function SHFileOperation; external shell32 name 'SHFileOperationA';
  674. {$EXTERNALSYM SHFreeNameMappings}
  675. procedure SHFreeNameMappings; external shell32 name 'SHFreeNameMappings';
  676. {$EXTERNALSYM SHGetFileInfoA}
  677. function SHGetFileInfoA; external shell32 name 'SHGetFileInfoA';
  678. {$EXTERNALSYM SHGetFileInfoW}
  679. function SHGetFileInfoW; external shell32 name 'SHGetFileInfoW';
  680. {$EXTERNALSYM SHGetFileInfo}
  681. function SHGetFileInfo; external shell32 name 'SHGetFileInfoA';
  682. {$EXTERNALSYM ShellAboutA}
  683. function ShellAboutA; external shell32 name 'ShellAboutA';
  684. {$EXTERNALSYM ShellAboutW}
  685. function ShellAboutW; external shell32 name 'ShellAboutW';
  686. {$EXTERNALSYM ShellAbout}
  687. function ShellAbout; external shell32 name 'ShellAboutA';
  688. {$EXTERNALSYM ShellExecuteA}
  689. function ShellExecuteA; external shell32 name 'ShellExecuteA';
  690. {$EXTERNALSYM ShellExecuteW}
  691. function ShellExecuteW; external shell32 name 'ShellExecuteW';
  692. {$EXTERNALSYM ShellExecute}
  693. function ShellExecute; external shell32 name 'ShellExecuteA';
  694. {$EXTERNALSYM ShellExecuteExA}
  695. function ShellExecuteExA; external shell32 name 'ShellExecuteExA';
  696. {$EXTERNALSYM ShellExecuteExW}
  697. function ShellExecuteExW; external shell32 name 'ShellExecuteExW';
  698. {$EXTERNALSYM ShellExecuteEx}
  699. function ShellExecuteEx; external shell32 name 'ShellExecuteExA';
  700. {$EXTERNALSYM Shell_NotifyIconA}
  701. function Shell_NotifyIconA; external shell32 name 'Shell_NotifyIconA';
  702. {$EXTERNALSYM Shell_NotifyIconW}
  703. function Shell_NotifyIconW; external shell32 name 'Shell_NotifyIconW';
  704. {$EXTERNALSYM Shell_NotifyIcon}
  705. function Shell_NotifyIcon; external shell32 name 'Shell_NotifyIconA';
  706.  
  707. end.
  708.